﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using I3.AgenteIA.Dominio.Gramatica;

namespace I3.AgenteIA.Dominio.Teste.Gramatica
{
    [TestClass]
    public class OracaoTest
    {
        [TestMethod]
        [ExpectedException(typeof(ArgumentNullException))]
        public void Construtor_Caso1()
        {
            // Declara as variaveis auxiliares do teste
            string texto = "";

            // Declara os objetos mock do teste

            // Configura a execução dos métodos mock

            // Realizada a execução do teste
            Oracao oracao = new Oracao(texto);

            // Realiza os assets dos objetos mocks e variaveis
        }

        [TestMethod]
        public void Construtor_Caso2()
        {
            // Declara as variaveis auxiliares do teste
            string texto = "Criação da sentença. A setença é composta";

            // Declara os objetos mock do teste

            // Configura a execução dos métodos mock

            // Realizada a execução do teste
            Oracao oracao = new Oracao(texto);

            // Realiza os assets dos objetos mocks e variaveis
            Assert.AreEqual(texto, oracao.Texto);
            Assert.AreEqual(0, oracao.Sentencas.Count());
        }

        [TestMethod]
        [ExpectedException(typeof(ArgumentException))]
        public void CriarSentencaTest_Caso1()
        {
            // Declara as variaveis auxiliares do teste
            string texto = "Criação da sentença. A setença é composta";

            // Declara os objetos mock do teste

            // Configura a execução dos métodos mock

            // Realizada a execução do teste
            Oracao oracao = new Oracao(texto);
            Sentenca primeiraParte = oracao.CriarSentenca("Sem nenhuma referencia.");

            // Realiza os assets dos objetos mocks e variaveis
        }

        [TestMethod]
        public void CriarSentencaTest_Caso2()
        {
            // Declara as variaveis auxiliares do teste
            string texto = "Criação da sentença. A setença é composta";

            // Declara os objetos mock do teste

            // Configura a execução dos métodos mock

            // Realizada a execução do teste
            Oracao oracao = new Oracao(texto);
            Sentenca primeiraParte = oracao.CriarSentenca("Criação da sentença.");
            Sentenca segundaParte = oracao.CriarSentenca("A setença é composta");

            // Realiza os assets dos objetos mocks e variaveis
            Assert.AreEqual(2, oracao.Sentencas.Count());

            Assert.AreEqual(oracao, primeiraParte.Oracao);
            Assert.AreEqual("Criação da sentença.", primeiraParte.Texto);

            Assert.AreEqual(oracao, segundaParte.Oracao);
            Assert.AreEqual("A setença é composta", segundaParte.Texto);
        }
    }
}
